package com.chara.rabbitmq_demo.com.chara.rabbitmq.basic;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @Classname Producer
 * @Description 消息生产者
 * @Date 2025/10/8 18:58
 * @Author Chara
 */
public class Producer {

    public static void main(String[] args) throws Exception {

        // 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置主机地址
        connectionFactory.setHost("127.0.0.1");
        // 设置连接端口号，默认为5672
        connectionFactory.setPort(5672);
        // 设置虚拟主机
        connectionFactory.setVirtualHost("/");
        // 设置连接用户名与密码，默认guest
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        // 创建连接
        Connection connection = connectionFactory.newConnection();
        // 创建频道
        Channel channel = connection.createChannel();

        // 声明队列，在rabbitMQ中创建一个队列
        /**
         * queue: 队列名称
         * durable： 是否定义持久化，当RabbitMQ重启后，队列仍然存在
         * exclusive： 是否独占本次连接，若独占则只能有一个消费者监听这个队列且connection关闭时删除这个队列
         * autoDelete：是否在不使用时自动删除队列，也就是没有消费者时自动删除
         * arguments： 队列其他参数
         */
        channel.queueDeclare("demo_queue",true,false,false,null);

        // 发送消息
        String message = "hello world";

        /**
         * 参数1：交换机名称
         * 参数2：路由key，简单模式可以传递队列名称
         * 参数3：配置信息
         * 参数4：发送消息内容（字节数组）
         */
        channel.basicPublish("", "demo_queue", null, message.getBytes());

        System.out.println("消息发送成功");

        // 关闭资源
        channel.close();
        connection.close();
    }
}
